Redis持久化的方法(RDB、AOF) 您所在的位置:网站首页 redis 持久化模式 Redis持久化的方法(RDB、AOF)

Redis持久化的方法(RDB、AOF)

2023-10-16 14:30| 来源: 网络整理| 查看: 265

Redis如何进行持久化:

RDB:Redis DataBase AOF:Append Only File RDB与AOF混合使用 RDB(Redis DataBase)

RDB持久化是以指定时间间隔执行数据集的时间点快照,就是在某一时刻的数据和状态以文件的形式写到磁盘上。如果Redis故障宕机,快照文件也不会丢失。这个快照文件称为RDB文件(dump.rdb)。

操作时我出现的疑问: 为什么我没有配置redis的持久化,重启之后数据并没有丢失? Redis默认使用RDB文件进行持久化,即使您没有显式地配置它。如果Redis在关闭时执行了快照,那么它将保存内存中的所有数据到磁盘上的RDB文件中。因此,在重启Redis时,Redis会从该文件中加载数据,并将其重新放入内存中。

以Redis v7版本为例,在配置文件中关于快照的配置: image.png 在默认配置文件中,有三个说明默认配置:

1小时之后,如果至少有1次修改的,则打个快照 5分钟之后,如果至少有100次修改的,则打个快照 60秒之后,如果至少有10000次修改的,则打个快照 自动触发快照的操作步骤:

以下配置是在redis v7下操作的。

设置快照的触发条件

如果在10秒内出现两次修改,则触发快照操作。 image.png

设置快照文件的保存位置

设置rdb的保存位置,该路径文件夹需要事先创建好。 image.png

修改dump的文件名称

修改名称为了便于查找,可不修改。 image.png

触发备份

连接redis并在10秒内增加两条数据,查看是否触发快照。 image.png

恢复备份

我们把dump6379.rdb文件先进行备份为dump6379.rdb.bak,然后清空redis数据,再关闭redis服务端。因为关闭redis服务、或者清空redis数据都会自动进行备份,所以会多出一个rdb文件,我们将它删除。再把备份文件dump6379.rdb.bak修改为dump6379.rdb,然后再次启动redis服务端。我们就可以看到数据已经会恢复到备份的时候。【当redis宕机的时候,注意要备份一下rdb文件,防止rdb文件被更新。还有就是最好将备份文件和redis服务器进行分机隔离,防止redis服务器异常时,备份文件也拿不到了】

手动触发操作 dbsave(推荐)

连接redis后,在命令行输入dbsave后,后台会fork出一个子进程,不会阻塞,以异步的方式进行备份,不影响redis正常服务。

save(不推荐)

连接redis后,在命令行输入save后,会对redis进行阻塞,在进行备份。在生产环境是不允许这样操作的,会导致redis服务中断异常。

RDB备份的缺点 因为rdb备份是需要配置时间和次数策略的,如果时间没到或者次数没达到,这时候redis服务宕机、断电或者kill -9暴力关进程,可能就会丢失最新的数据。 因为rdb备份会fork出一个子进程,如果数据量很大,fork可能会很耗时,子进程也会争抢消耗CPU资源。 修复异常rdb文件

如果rdb文件数据出现异常,可以通过bin目录redis自带的命令进行修复 image.png

什么情况会触发RDB快照 配置文件中默认的快照配置 手动save/bgsave命令 执行flushall/flushdb命令也会产生dump.rdb,但里面是空的,没有意义 执行shutdown且没有设置开启AOF持久化 主从复制时,主节点自动触发 如何禁用RDB快照

在redis.conf中,将策略修改为save ""即可。

AOF(Append Only File)

AOF就是将redis执行过的所有指令以日志的形式记录到文件中(读操作不记录),当redis启动时,会读取该文件重新构建数据,完成数据恢复的工作。保存日志的文件叫appendonly.aof。

默认情况下,redis没有开启AOF的。开启AOF功能需要修改redis.conf设置appendonly yes。

AOF持久化工作流程

image.png

AOF缓冲区三种写回策略 配置项写回时机优点缺点always每条执行的指令同步写回可靠性高每个命令都要写磁盘,耗性能everysec每秒同步写回性能适中宕机时会丢失最新1秒的数据no操作系统控制缓冲区同步写回性能好宕机时丢失数据较多 使用AOF操作步骤

以下配置是在redis v7下操作的。

开启AOF

image.png

选择回写策略

默认使用每秒写回策略 image.png

设置AOF文件保存路径和名称

image.png

redis v7采用的是Multi Part AOF设计,会出现三种AOF文件

基本文件: appendonly.aof.1.base.rdb 增量文件: appendonly.aof.1.incr.aof appendonly.aof.2.incr.aof 清单文件 appendonly.aof.maniftest

image.png

正常恢复AOF备份文件

将appendonlydir文件夹进行备份为appendonlydir-bak,并操作redis进行增加命令操作,然后关闭redis服务端。将rdb文件和appendonlydir文件删除,将appendonlydir-bak备份文件恢复为appendonlydir,然后启动redis服务端,查看数据已经恢复正常。

异常恢复AOF备份文件

如果出现宕机或者破坏,导致AOF文件错误或异常,会导致redis服务不能正常运行。需要通过redis自带的修复工具修复aof的增量文件。 image.png

AOF备份的缺点 在相同的数据集数据下,AOF文件要远大于RDB文件,恢复速度慢于RDB。 AOF运行效率要慢于RDB。everysec策略效率较好;no策略效率和RDB相同。 AOF重写机制

启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

自动触发

默认配置:当AOF文件大小是上次rewrite后大小的一倍并且文件大于64M时。 image.png

触发重写机制后,本来是.1的文件,会变成.2的文件。 image.png 例如如果原本是有两条set命令:

set k1 11 set k1 1111

重写机制后,记录文件就会压缩成:

set k1 1111 手动触发

向服务端发送命令:bgrewriteaof

RDB与AOF混合使用

两种方式可以同时打开,但是由AOF说了算。RDB作为备用恢复手段,也可以保持启用。

在同时开启RDB和AOF持久化时,重启时只会加载AOF文件,不会加载RDB文件。

通过设置redis.conf的aof-use-rdb-preamble yes启用混合方式,设置为no表示禁用。

不做持久化,纯内存模式

如果不做持久化,可以同时关闭RDB+AOF。

#禁用RDB # 我们仍可以使用命令bgsave、save手动生成RDB文件 save "" # 禁用AOF # 我们仍可以使用命令bgrewriteaof手动生成AOF文件 appendonly no


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有